GtkCssChange previous_change);
GtkCssChange (* tree_get_change) (const GtkCssSelectorTree *tree,
const GtkCssMatcher *matcher);
+ guint (* hash_one) (const GtkCssSelector *selector);
int (* compare_one) (const GtkCssSelector *a,
const GtkCssSelector *b);
{
return
a->class == b->class &&
- a->data == b->data;
+ a->class->compare_one (a, b) == 0;
}
static guint
-gtk_css_selector_hash (const GtkCssSelector *selector)
+gtk_css_selector_hash_one (const GtkCssSelector *selector)
{
- return GPOINTER_TO_UINT (selector->class) ^ GPOINTER_TO_UINT (selector->data);
+ return GPOINTER_TO_UINT (selector->class) ^ selector->class->hash_one (selector);
}
static gpointer *
return change;
}
+static guint
+gtk_css_selector_descendant_hash_one (const GtkCssSelector *a)
+{
+ return 0;
+}
+
static int
gtk_css_selector_descendant_compare_one (const GtkCssSelector *a,
const GtkCssSelector *b)
gtk_css_selector_descendant_tree_match,
gtk_css_selector_descendant_get_change,
gtk_css_selector_descendant_tree_get_change,
+ gtk_css_selector_descendant_hash_one,
gtk_css_selector_descendant_compare_one,
FALSE, FALSE, FALSE, FALSE, FALSE
};
return _gtk_css_change_for_child (previous_change);
}
+static guint
+gtk_css_selector_child_hash_one (const GtkCssSelector *a)
+{
+ return 0;
+}
+
static int
gtk_css_selector_child_compare_one (const GtkCssSelector *a,
const GtkCssSelector *b)
gtk_css_selector_child_tree_match,
gtk_css_selector_child_get_change,
gtk_css_selector_child_tree_get_change,
+ gtk_css_selector_child_hash_one,
gtk_css_selector_child_compare_one,
FALSE, FALSE, FALSE, FALSE, FALSE
};
return _gtk_css_change_for_sibling (previous_change);
}
+static guint
+gtk_css_selector_sibling_hash_one (const GtkCssSelector *a)
+{
+ return 0;
+}
+
static int
gtk_css_selector_sibling_compare_one (const GtkCssSelector *a,
const GtkCssSelector *b)
gtk_css_selector_sibling_tree_match,
gtk_css_selector_sibling_get_change,
gtk_css_selector_sibling_tree_get_change,
+ gtk_css_selector_sibling_hash_one,
gtk_css_selector_sibling_compare_one,
FALSE, FALSE, FALSE, FALSE, FALSE
};
return _gtk_css_change_for_sibling (previous_change);
}
+static guint
+gtk_css_selector_adjacent_hash_one (const GtkCssSelector *a)
+{
+ return 0;
+}
+
static int
gtk_css_selector_adjacent_compare_one (const GtkCssSelector *a,
const GtkCssSelector *b)
gtk_css_selector_adjacent_tree_match,
gtk_css_selector_adjacent_get_change,
gtk_css_selector_adjacent_tree_get_change,
+ gtk_css_selector_adjacent_hash_one,
gtk_css_selector_adjacent_compare_one,
FALSE, FALSE, FALSE, FALSE, FALSE
};
c, \
print_func, \
match_func, \
+ hash_func, \
comp_func, \
increase_id_specificity, \
increase_class_specificity, \
gtk_css_selector_ ## n ## _tree_match, \
gtk_css_selector_ ## n ## _get_change, \
gtk_css_selector_ ## n ## _tree_get_change, \
+ hash_func, \
comp_func, \
increase_id_specificity, increase_class_specificity, increase_element_specificity, \
TRUE, FALSE \
gtk_css_selector_not_ ## n ## _tree_match, \
gtk_css_selector_ ## n ## _get_change, \
gtk_css_selector_ ## n ## _tree_get_change, \
+ hash_func, \
comp_func, \
increase_id_specificity, increase_class_specificity, increase_element_specificity, \
TRUE, FALSE \
return previous_change;
}
+static guint
+gtk_css_selector_any_hash_one (const GtkCssSelector *a)
+{
+ return 0;
+}
+
static int
gtk_css_selector_any_compare_one (const GtkCssSelector *a,
const GtkCssSelector *b)
gtk_css_selector_any_tree_match,
gtk_css_selector_any_get_change,
gtk_css_selector_any_tree_get_change,
+ gtk_css_selector_any_hash_one,
gtk_css_selector_any_compare_one,
FALSE, FALSE, FALSE, TRUE, TRUE
};
return 0;
}
+static guint
+gtk_css_selector_none_hash_one (const GtkCssSelector *a)
+{
+ return 0;
+}
+
static int
gtk_css_selector_none_compare_one (const GtkCssSelector *a,
const GtkCssSelector *b)
gtk_css_selector_none_tree_match,
gtk_css_selector_none_get_change,
gtk_css_selector_none_tree_get_change,
+ gtk_css_selector_none_hash_one,
gtk_css_selector_none_compare_one,
FALSE, FALSE, FALSE, TRUE, TRUE
};
return _gtk_css_matcher_has_type (matcher, ((TypeReference *)selector->data)->type);
}
+static guint
+hash_name (const GtkCssSelector *a)
+{
+ return g_str_hash (((TypeReference *)a->data)->name);
+}
+
static int
comp_name (const GtkCssSelector *a,
const GtkCssSelector *b)
((TypeReference *)b->data)->name);
}
-DEFINE_SIMPLE_SELECTOR(name, NAME, print_name, match_name, comp_name, FALSE, FALSE, TRUE)
+DEFINE_SIMPLE_SELECTOR(name, NAME, print_name, match_name, hash_name, comp_name, FALSE, FALSE, TRUE)
/* REGION */
return change;
}
+static guint
+gtk_css_selector_region_hash_one (const GtkCssSelector *a)
+{
+ return g_str_hash (a->data);
+}
+
static int
gtk_css_selector_region_compare_one (const GtkCssSelector *a,
const GtkCssSelector *b)
gtk_css_selector_region_tree_match,
gtk_css_selector_region_get_change,
gtk_css_selector_region_tree_get_change,
+ gtk_css_selector_region_hash_one,
gtk_css_selector_region_compare_one,
FALSE, FALSE, TRUE, TRUE, TRUE
};
return _gtk_css_matcher_has_class (matcher, GPOINTER_TO_UINT (selector->data));
}
+static guint
+hash_class (const GtkCssSelector *a)
+{
+ return g_str_hash (g_quark_to_string (GPOINTER_TO_UINT (a->data)));
+}
+
static int
comp_class (const GtkCssSelector *a,
const GtkCssSelector *b)
g_quark_to_string (GPOINTER_TO_UINT (b->data)));
}
-DEFINE_SIMPLE_SELECTOR(class, CLASS, print_class, match_class, comp_class, FALSE, TRUE, FALSE)
+DEFINE_SIMPLE_SELECTOR(class, CLASS, print_class, match_class, hash_class, comp_class, FALSE, TRUE, FALSE)
/* ID */
return _gtk_css_matcher_has_id (matcher, selector->data);
}
+static guint
+hash_id (const GtkCssSelector *a)
+{
+ return g_str_hash (a->data);
+}
+
static int
comp_id (const GtkCssSelector *a,
const GtkCssSelector *b)
return strcmp (a->data, b->data);
}
-DEFINE_SIMPLE_SELECTOR(id, ID, print_id, match_id, comp_id, TRUE, FALSE, FALSE)
+DEFINE_SIMPLE_SELECTOR(id, ID, print_id, match_id, hash_id, comp_id, TRUE, FALSE, FALSE)
/* PSEUDOCLASS FOR STATE */
return (_gtk_css_matcher_get_state (matcher) & state) == state;
}
+static guint
+hash_pseudoclass_state (const GtkCssSelector *a)
+{
+ return GPOINTER_TO_UINT (a->data);
+}
+
+
static int
comp_pseudoclass_state (const GtkCssSelector *a,
const GtkCssSelector *b)
}
#define GTK_CSS_CHANGE_PSEUDOCLASS_STATE GTK_CSS_CHANGE_STATE
-DEFINE_SIMPLE_SELECTOR(pseudoclass_state, PSEUDOCLASS_STATE, print_pseudoclass_state, match_pseudoclass_state, comp_pseudoclass_state, FALSE, TRUE, FALSE)
+DEFINE_SIMPLE_SELECTOR(pseudoclass_state, PSEUDOCLASS_STATE, print_pseudoclass_state,
+ match_pseudoclass_state, hash_pseudoclass_state, comp_pseudoclass_state,
+ FALSE, TRUE, FALSE)
#undef GTK_CSS_CHANGE_PSEUDOCLASS_STATE
/* PSEUDOCLASS FOR POSITION */
return previous_change | GTK_CSS_CHANGE_POSITION;
}
+static guint
+gtk_css_selector_pseudoclass_position_hash_one (const GtkCssSelector *a)
+{
+ return GPOINTER_TO_UINT (a->data);
+}
+
static int
gtk_css_selector_pseudoclass_position_compare_one (const GtkCssSelector *a,
const GtkCssSelector *b)
gtk_css_selector_pseudoclass_position_tree_match,
gtk_css_selector_pseudoclass_position_get_change,
gtk_css_selector_pseudoclass_position_tree_get_change,
+ gtk_css_selector_pseudoclass_position_hash_one,
gtk_css_selector_pseudoclass_position_compare_one,
FALSE, TRUE, FALSE, TRUE, TRUE
};
static GHashTable *
gtk_css_selectors_count_initial_init (void)
{
- return g_hash_table_new ((GHashFunc)gtk_css_selector_hash, (GEqualFunc)gtk_css_selector_equal);
+ return g_hash_table_new ((GHashFunc)gtk_css_selector_hash_one, (GEqualFunc)gtk_css_selector_equal);
}
static void
-gtk_css_selectors_count_initial (const GtkCssSelector *selector, GHashTable *hash)
+gtk_css_selectors_count_initial (const GtkCssSelector *selector, GHashTable *hash_one)
{
if (!selector->class->is_simple || selector->class->must_keep_order)
{
- guint count = GPOINTER_TO_INT (g_hash_table_lookup (hash, selector));
- g_hash_table_replace (hash, (gpointer)selector, GUINT_TO_POINTER (count + 1));
+ guint count = GPOINTER_TO_INT (g_hash_table_lookup (hash_one, selector));
+ g_hash_table_replace (hash_one, (gpointer)selector, GUINT_TO_POINTER (count + 1));
return;
}
selector && selector->class->is_simple && !selector->class->must_keep_order;
selector = gtk_css_selector_previous (selector))
{
- guint count = GPOINTER_TO_INT (g_hash_table_lookup (hash, selector));
- g_hash_table_replace (hash, (gpointer)selector, GUINT_TO_POINTER (count + 1));
+ guint count = GPOINTER_TO_INT (g_hash_table_lookup (hash_one, selector));
+ g_hash_table_replace (hash_one, (gpointer)selector, GUINT_TO_POINTER (count + 1));
}
}